/*!
 * Fuse.js v3.4.5 - Lightweight fuzzy-search (http://fusejs.io)
 *
 * Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)
 * All Rights Reserved. Apache Software License 2.0
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 */
! function(e, t) {
  "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define("Fuse", [], t) : "object" == typeof exports ? exports.Fuse = t() : e.Fuse = t()
}(this, function() {
  return function(e) {
    var t = {};

    function n(r) {
      if (t[r]) return t[r].exports;
      var o = t[r] = {
        i: r,
        l: !1,
        exports: {}
      };
      return e[r].call(o.exports, o, o.exports, n), o.l = !0, o.exports
    }
    return n.m = e, n.c = t, n.d = function(e, t, r) {
      n.o(e, t) || Object.defineProperty(e, t, {
        enumerable: !0,
        get: r
      })
    }, n.r = function(e) {
      "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
        value: "Module"
      }), Object.defineProperty(e, "__esModule", {
        value: !0
      })
    }, n.t = function(e, t) {
      if (1 & t && (e = n(e)), 8 & t) return e;
      if (4 & t && "object" == typeof e && e && e.__esModule) return e;
      var r = Object.create(null);
      if (n.r(r), Object.defineProperty(r, "default", {
          enumerable: !0,
          value: e
        }), 2 & t && "string" != typeof e)
        for (var o in e) n.d(r, o, function(t) {
          return e[t]
        }.bind(null, o));
      return r
    }, n.n = function(e) {
      var t = e && e.__esModule ? function() {
        return e.default
      } : function() {
        return e
      };
      return n.d(t, "a", t), t
    }, n.o = function(e, t) {
      return Object.prototype.hasOwnProperty.call(e, t)
    }, n.p = "", n(n.s = 1)
  }([function(e, t) {
    e.exports = function(e) {
      return Array.isArray ? Array.isArray(e) : "[object Array]" === Object.prototype.toString.call(e)
    }
  }, function(e, t, n) {
    function r(e) {
      return (r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
        return typeof e
      } : function(e) {
        return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
      })(e)
    }

    function o(e, t) {
      for (var n = 0; n < t.length; n++) {
        var r = t[n];
        r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r)
      }
    }
    var i = n(2),
      a = n(8),
      s = n(0),
      c = function() {
        function e(t, n) {
          var r = n.location,
            o = void 0 === r ? 0 : r,
            i = n.distance,
            s = void 0 === i ? 100 : i,
            c = n.threshold,
            h = void 0 === c ? .6 : c,
            l = n.maxPatternLength,
            u = void 0 === l ? 32 : l,
            f = n.caseSensitive,
            d = void 0 !== f && f,
            v = n.tokenSeparator,
            p = void 0 === v ? / +/g : v,
            g = n.findAllMatches,
            y = void 0 !== g && g,
            m = n.minMatchCharLength,
            k = void 0 === m ? 1 : m,
            S = n.id,
            x = void 0 === S ? null : S,
            b = n.keys,
            M = void 0 === b ? [] : b,
            _ = n.shouldSort,
            L = void 0 === _ || _,
            w = n.getFn,
            A = void 0 === w ? a : w,
            C = n.sortFn,
            I = void 0 === C ? function(e, t) {
              return e.score - t.score
            } : C,
            O = n.tokenize,
            j = void 0 !== O && O,
            P = n.matchAllTokens,
            F = void 0 !== P && P,
            T = n.includeMatches,
            z = void 0 !== T && T,
            E = n.includeScore,
            K = void 0 !== E && E,
            $ = n.verbose,
            J = void 0 !== $ && $;
          ! function(e, t) {
            if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function")
          }(this, e), this.options = {
            location: o,
            distance: s,
            threshold: h,
            maxPatternLength: u,
            isCaseSensitive: d,
            tokenSeparator: p,
            findAllMatches: y,
            minMatchCharLength: k,
            id: x,
            keys: M,
            includeMatches: z,
            includeScore: K,
            shouldSort: L,
            getFn: A,
            sortFn: I,
            verbose: J,
            tokenize: j,
            matchAllTokens: F
          }, this.setCollection(t)
        }
        var t, n, c;
        return t = e, (n = [{
          key: "setCollection",
          value: function(e) {
            return this.list = e, e
          }
        }, {
          key: "search",
          value: function(e) {
            var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {
              limit: !1
            };
            this._log('---------\nSearch pattern: "'.concat(e, '"'));
            var n = this._prepareSearchers(e),
              r = n.tokenSearchers,
              o = n.fullSearcher,
              i = this._search(r, o),
              a = i.weights,
              s = i.results;
            return this._computeScore(a, s), this.options.shouldSort && this._sort(s), t.limit && "number" == typeof t.limit && (s = s.slice(0, t.limit)), this._format(s)
          }
        }, {
          key: "_prepareSearchers",
          value: function() {
            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
              t = [];
            if (this.options.tokenize)
              for (var n = e.split(this.options.tokenSeparator), r = 0, o = n.length; r < o; r += 1) t.push(new i(n[r], this.options));
            return {
              tokenSearchers: t,
              fullSearcher: new i(e, this.options)
            }
          }
        }, {
          key: "_search",
          value: function() {
            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [],
              t = arguments.length > 1 ? arguments[1] : void 0,
              n = this.list,
              r = {},
              o = [];
            if ("string" == typeof n[0]) {
              for (var i = 0, a = n.length; i < a; i += 1) this._analyze({
                key: "",
                value: n[i],
                record: i,
                index: i
              }, {
                resultMap: r,
                results: o,
                tokenSearchers: e,
                fullSearcher: t
              });
              return {
                weights: null,
                results: o
              }
            }
            for (var s = {}, c = 0, h = n.length; c < h; c += 1)
              for (var l = n[c], u = 0, f = this.options.keys.length; u < f; u += 1) {
                var d = this.options.keys[u];
                if ("string" != typeof d) {
                  if (s[d.name] = {
                      weight: 1 - d.weight || 1
                    }, d.weight <= 0 || d.weight > 1) throw new Error("Key weight has to be > 0 and <= 1");
                  d = d.name
                } else s[d] = {
                  weight: 1
                };
                this._analyze({
                  key: d,
                  value: this.options.getFn(l, d),
                  record: l,
                  index: c
                }, {
                  resultMap: r,
                  results: o,
                  tokenSearchers: e,
                  fullSearcher: t
                })
              }
            return {
              weights: s,
              results: o
            }
          }
        }, {
          key: "_analyze",
          value: function(e, t) {
            var n = e.key,
              r = e.arrayIndex,
              o = void 0 === r ? -1 : r,
              i = e.value,
              a = e.record,
              c = e.index,
              h = t.tokenSearchers,
              l = void 0 === h ? [] : h,
              u = t.fullSearcher,
              f = void 0 === u ? [] : u,
              d = t.resultMap,
              v = void 0 === d ? {} : d,
              p = t.results,
              g = void 0 === p ? [] : p;
            if (null != i) {
              var y = !1,
                m = -1,
                k = 0;
              if ("string" == typeof i) {
                this._log("\nKey: ".concat("" === n ? "-" : n));
                var S = f.search(i);
                if (this._log('Full text: "'.concat(i, '", score: ').concat(S.score)), this.options.tokenize) {
                  for (var x = i.split(this.options.tokenSeparator), b = [], M = 0; M < l.length; M += 1) {
                    var _ = l[M];
                    this._log('\nPattern: "'.concat(_.pattern, '"'));
                    for (var L = !1, w = 0; w < x.length; w += 1) {
                      var A = x[w],
                        C = _.search(A),
                        I = {};
                      C.isMatch ? (I[A] = C.score, y = !0, L = !0, b.push(C.score)) : (I[A] = 1, this.options.matchAllTokens || b.push(1)), this._log('Token: "'.concat(A, '", score: ').concat(I[A]))
                    }
                    L && (k += 1)
                  }
                  m = b[0];
                  for (var O = b.length, j = 1; j < O; j += 1) m += b[j];
                  m /= O, this._log("Token score average:", m)
                }
                var P = S.score;
                m > -1 && (P = (P + m) / 2), this._log("Score average:", P);
                var F = !this.options.tokenize || !this.options.matchAllTokens || k >= l.length;
                if (this._log("\nCheck Matches: ".concat(F)), (y || S.isMatch) && F) {
                  var T = v[c];
                  T ? T.output.push({
                    key: n,
                    arrayIndex: o,
                    value: i,
                    score: P,
                    matchedIndices: S.matchedIndices
                  }) : (v[c] = {
                    item: a,
                    output: [{
                      key: n,
                      arrayIndex: o,
                      value: i,
                      score: P,
                      matchedIndices: S.matchedIndices
                    }]
                  }, g.push(v[c]))
                }
              } else if (s(i))
                for (var z = 0, E = i.length; z < E; z += 1) this._analyze({
                  key: n,
                  arrayIndex: z,
                  value: i[z],
                  record: a,
                  index: c
                }, {
                  resultMap: v,
                  results: g,
                  tokenSearchers: l,
                  fullSearcher: f
                })
            }
          }
        }, {
          key: "_computeScore",
          value: function(e, t) {
            this._log("\n\nComputing score:\n");
            for (var n = 0, r = t.length; n < r; n += 1) {
              for (var o = t[n].output, i = o.length, a = 1, s = 1, c = 0; c < i; c += 1) {
                var h = e ? e[o[c].key].weight : 1,
                  l = (1 === h ? o[c].score : o[c].score || .001) * h;
                1 !== h ? s = Math.min(s, l) : (o[c].nScore = l, a *= l)
              }
              t[n].score = 1 === s ? a : s, this._log(t[n])
            }
          }
        }, {
          key: "_sort",
          value: function(e) {
            this._log("\n\nSorting...."), e.sort(this.options.sortFn)
          }
        }, {
          key: "_format",
          value: function(e) {
            var t = [];
            if (this.options.verbose) {
              var n = [];
              this._log("\n\nOutput:\n\n", JSON.stringify(e, function(e, t) {
                if ("object" === r(t) && null !== t) {
                  if (-1 !== n.indexOf(t)) return;
                  n.push(t)
                }
                return t
              })), n = null
            }
            var o = [];
            this.options.includeMatches && o.push(function(e, t) {
              var n = e.output;
              t.matches = [];
              for (var r = 0, o = n.length; r < o; r += 1) {
                var i = n[r];
                if (0 !== i.matchedIndices.length) {
                  var a = {
                    indices: i.matchedIndices,
                    value: i.value
                  };
                  i.key && (a.key = i.key), i.hasOwnProperty("arrayIndex") && i.arrayIndex > -1 && (a.arrayIndex = i.arrayIndex), t.matches.push(a)
                }
              }
            }), this.options.includeScore && o.push(function(e, t) {
              t.score = e.score
            });
            for (var i = 0, a = e.length; i < a; i += 1) {
              var s = e[i];
              if (this.options.id && (s.item = this.options.getFn(s.item, this.options.id)[0]), o.length) {
                for (var c = {
                    item: s.item
                  }, h = 0, l = o.length; h < l; h += 1) o[h](s, c);
                t.push(c)
              } else t.push(s.item)
            }
            return t
          }
        }, {
          key: "_log",
          value: function() {
            var e;
            this.options.verbose && (e = console).log.apply(e, arguments)
          }
        }]) && o(t.prototype, n), c && o(t, c), e
      }();
    e.exports = c
  }, function(e, t, n) {
    function r(e, t) {
      for (var n = 0; n < t.length; n++) {
        var r = t[n];
        r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r)
      }
    }
    var o = n(3),
      i = n(4),
      a = n(7),
      s = function() {
        function e(t, n) {
          var r = n.location,
            o = void 0 === r ? 0 : r,
            i = n.distance,
            s = void 0 === i ? 100 : i,
            c = n.threshold,
            h = void 0 === c ? .6 : c,
            l = n.maxPatternLength,
            u = void 0 === l ? 32 : l,
            f = n.isCaseSensitive,
            d = void 0 !== f && f,
            v = n.tokenSeparator,
            p = void 0 === v ? / +/g : v,
            g = n.findAllMatches,
            y = void 0 !== g && g,
            m = n.minMatchCharLength,
            k = void 0 === m ? 1 : m;
          ! function(e, t) {
            if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function")
          }(this, e), this.options = {
            location: o,
            distance: s,
            threshold: h,
            maxPatternLength: u,
            isCaseSensitive: d,
            tokenSeparator: p,
            findAllMatches: y,
            minMatchCharLength: k
          }, this.pattern = this.options.isCaseSensitive ? t : t.toLowerCase(), this.pattern.length <= u && (this.patternAlphabet = a(this.pattern))
        }
        var t, n, s;
        return t = e, (n = [{
          key: "search",
          value: function(e) {
            if (this.options.isCaseSensitive || (e = e.toLowerCase()), this.pattern === e) return {
              isMatch: !0,
              score: 0,
              matchedIndices: [
                [0, e.length - 1]
              ]
            };
            var t = this.options,
              n = t.maxPatternLength,
              r = t.tokenSeparator;
            if (this.pattern.length > n) return o(e, this.pattern, r);
            var a = this.options,
              s = a.location,
              c = a.distance,
              h = a.threshold,
              l = a.findAllMatches,
              u = a.minMatchCharLength;
            return i(e, this.pattern, this.patternAlphabet, {
              location: s,
              distance: c,
              threshold: h,
              findAllMatches: l,
              minMatchCharLength: u
            })
          }
        }]) && r(t.prototype, n), s && r(t, s), e
      }();
    e.exports = s
  }, function(e, t) {
    var n = /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g;
    e.exports = function(e, t) {
      var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : / +/g,
        o = new RegExp(t.replace(n, "\\$&").replace(r, "|")),
        i = e.match(o),
        a = !!i,
        s = [];
      if (a)
        for (var c = 0, h = i.length; c < h; c += 1) {
          var l = i[c];
          s.push([e.indexOf(l), l.length - 1])
        }
      return {
        score: a ? .5 : 1,
        isMatch: a,
        matchedIndices: s
      }
    }
  }, function(e, t, n) {
    var r = n(5),
      o = n(6);
    e.exports = function(e, t, n, i) {
      for (var a = i.location, s = void 0 === a ? 0 : a, c = i.distance, h = void 0 === c ? 100 : c, l = i.threshold, u = void 0 === l ? .6 : l, f = i.findAllMatches, d = void 0 !== f && f, v = i.minMatchCharLength, p = void 0 === v ? 1 : v, g = s, y = e.length, m = u, k = e.indexOf(t, g), S = t.length, x = [], b = 0; b < y; b += 1) x[b] = 0;
      if (-1 !== k) {
        var M = r(t, {
          errors: 0,
          currentLocation: k,
          expectedLocation: g,
          distance: h
        });
        if (m = Math.min(M, m), -1 !== (k = e.lastIndexOf(t, g + S))) {
          var _ = r(t, {
            errors: 0,
            currentLocation: k,
            expectedLocation: g,
            distance: h
          });
          m = Math.min(_, m)
        }
      }
      k = -1;
      for (var L = [], w = 1, A = S + y, C = 1 << S - 1, I = 0; I < S; I += 1) {
        for (var O = 0, j = A; O < j;) {
          r(t, {
            errors: I,
            currentLocation: g + j,
            expectedLocation: g,
            distance: h
          }) <= m ? O = j : A = j, j = Math.floor((A - O) / 2 + O)
        }
        A = j;
        var P = Math.max(1, g - j + 1),
          F = d ? y : Math.min(g + j, y) + S,
          T = Array(F + 2);
        T[F + 1] = (1 << I) - 1;
        for (var z = F; z >= P; z -= 1) {
          var E = z - 1,
            K = n[e.charAt(E)];
          if (K && (x[E] = 1), T[z] = (T[z + 1] << 1 | 1) & K, 0 !== I && (T[z] |= (L[z + 1] | L[z]) << 1 | 1 | L[z + 1]), T[z] & C && (w = r(t, {
              errors: I,
              currentLocation: E,
              expectedLocation: g,
              distance: h
            })) <= m) {
            if (m = w, (k = E) <= g) break;
            P = Math.max(1, 2 * g - k)
          }
        }
        if (r(t, {
            errors: I + 1,
            currentLocation: g,
            expectedLocation: g,
            distance: h
          }) > m) break;
        L = T
      }
      return {
        isMatch: k >= 0,
        score: 0 === w ? .001 : w,
        matchedIndices: o(x, p)
      }
    }
  }, function(e, t) {
    e.exports = function(e, t) {
      var n = t.errors,
        r = void 0 === n ? 0 : n,
        o = t.currentLocation,
        i = void 0 === o ? 0 : o,
        a = t.expectedLocation,
        s = void 0 === a ? 0 : a,
        c = t.distance,
        h = void 0 === c ? 100 : c,
        l = r / e.length,
        u = Math.abs(s - i);
      return h ? l + u / h : u ? 1 : l
    }
  }, function(e, t) {
    e.exports = function() {
      for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, n = [], r = -1, o = -1, i = 0, a = e.length; i < a; i += 1) {
        var s = e[i];
        s && -1 === r ? r = i : s || -1 === r || ((o = i - 1) - r + 1 >= t && n.push([r, o]), r = -1)
      }
      return e[i - 1] && i - r >= t && n.push([r, i - 1]), n
    }
  }, function(e, t) {
    e.exports = function(e) {
      for (var t = {}, n = e.length, r = 0; r < n; r += 1) t[e.charAt(r)] = 0;
      for (var o = 0; o < n; o += 1) t[e.charAt(o)] |= 1 << n - o - 1;
      return t
    }
  }, function(e, t, n) {
    var r = n(0);
    e.exports = function(e, t) {
      return function e(t, n, o) {
        if (n) {
          var i = n.indexOf("."),
            a = n,
            s = null; - 1 !== i && (a = n.slice(0, i), s = n.slice(i + 1));
          var c = t[a];
          if (null != c)
            if (s || "string" != typeof c && "number" != typeof c)
              if (r(c))
                for (var h = 0, l = c.length; h < l; h += 1) e(c[h], s, o);
              else s && e(c, s, o);
          else o.push(c.toString())
        } else o.push(t);
        return o
      }(e, t, [])
    }
  }])
});
